/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.evolve.webbot.portal;

import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController;
import com.gargoylesoftware.htmlunit.html.*;
import java.util.ArrayList;
import java.text.SimpleDateFormat;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.File;
import java.io.FileWriter;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.swing.JTextArea;
import org.apache.log4j.Logger;

import com.darthsys.webbotfile.portalfile.ComerMexDataFile;
import com.evolve.webbot.file.CommonErrorFile;
import com.evolve.webbot.bean.Comer;
import java.io.FileInputStream;
import java.util.Properties;

/**
 * 
 * @author DarthAE
 */
public class ComerMex {
	private String user;
	private String passwd;
	private String ext;
	private String path;
	private JTextArea jtextArea;

	public static String WB_MAIN_DIR = "evolve-webbot";
	public static String COMERMEX_MAIN_DIR = "comermex-webbot";
	public static String COMERMEX_PROP_DIR = "comermex-properties";
	public static String COMERMEX_PROP_ARC = "ComerMexPortal.properties";
	public static String COMERMEX_FILE_DIR = "comermex-files";
	public static String COMERMEX_ARC_EXT = ".html";
	public static String COMERMEX_ERROR_FILE = "comermex-error-";

	private SimpleDateFormat sdf = new SimpleDateFormat("yyyymmdd");
	private SimpleDateFormat shf = new SimpleDateFormat("");

	static Logger log = Logger.getLogger(ComerMex.class);

	public ComerMex() {
	}

	public ComerMex(String path) {
		this.path = path;
	}

	// public ComerMex(String path,JTextArea jtextArea)
	// {
	// this.path = path;
	// this.jtextArea = jtextArea;
	// }

	public ComerMex(String user, String passwd) {
		this.user = user;
		this.passwd = passwd;
	}

	public void accesoPortal() {
		int indPortalEjec = 0;
		String errorFilePath = "";
		String mainPath = "";
		Properties properties = new Properties();

		WebClient wc = new WebClient();
		wc.setJavaScriptEnabled(false);
		wc.setThrowExceptionOnScriptError(false);
		wc.setAjaxController(new NicelyResynchronizingAjaxController());

		CommonErrorFile cef = new CommonErrorFile();

		try {
			errorFilePath = this.path + File.separator + WB_MAIN_DIR
					+ File.separator + COMERMEX_MAIN_DIR + File.separator
					+ COMERMEX_FILE_DIR + File.separator + COMERMEX_ERROR_FILE
					+ sdf.format(new Date()) + ".txt";

			mainPath = this.path + File.separator + WB_MAIN_DIR
					+ File.separator + COMERMEX_MAIN_DIR + File.separator
					+ COMERMEX_PROP_DIR + File.separator + COMERMEX_PROP_ARC;

			FileInputStream fis = new FileInputStream(mainPath);
			properties.load(fis);

		} catch (IOException e) {
			log.error(
					"[-]error al recuperar archivo properties portal comercial mexicana ",
					e);
			cef.writeCommonWebTxtFile(errorFilePath,
					"error al recuperar archivo properties portal comercial mexicana");
		}

		try {

			indPortalEjec = Integer.parseInt(properties
					.getProperty("Portal.ejecuta"));

			if (indPortalEjec == 1) {
				// this.jtextArea.append("\n[+]recuperando archivo comermex");
				log.info("[-]descarga de informacion portal comercial mexicana");

				HtmlPage p = (HtmlPage) wc
						.getPage("http://www.provecomer.com.mx/webPrvd/LoginProvecomerNpSrv");
				HtmlForm f = (HtmlForm) p.getFormByName("frmLogin");
				HtmlTextInput t = (HtmlTextInput) f.getInputByName("proveedor");
				HtmlPasswordInput pass = (HtmlPasswordInput) f
						.getInputByName("password");

				t.setAttribute("value", properties.getProperty("Portal.user"));
				pass.setAttribute("value",
						properties.getProperty("Portal.passwd"));

				HtmlInput input = (HtmlInput) f.getInputByName("enviar1");
				HtmlPage r = (HtmlPage) input.click();
				wc.waitForBackgroundJavaScriptStartingBefore(50000);

				synchronized (r) {
					r.wait(500);
				}

				List<FrameWindow> windowList = r.getFrames();
				FrameWindow fwh = null;
				boolean flag = false;

				for (Iterator iter = windowList.iterator(); iter.hasNext();) {
					FrameWindow fw = (FrameWindow) iter.next();

					if (fw.getName().compareTo("menu") == 0 && flag == false) {
						fwh = fw;
						flag = true;
					}
				}

				HtmlPage r2 = (HtmlPage) fwh.getEnclosedPage();
				HtmlPage r3 = (HtmlPage) wc
						.getPage("http://www.provecomer.com.mx/webPrvd/VerificaOpcMenuSrv?menuId=129");

				List<HtmlAnchor> anchorList = r3.getAnchors();

				int k = 0;

				/* for para los primeros ocho links recuperados en r3 */

				for (Iterator iter = anchorList.iterator(); iter.hasNext();) {
					HtmlAnchor anc = (HtmlAnchor) iter.next();

					if (anc.getAttribute("class").compareTo("liga") == 0) {

						HtmlPage linkPage = (HtmlPage) anc.click();
						wc.waitForBackgroundJavaScriptStartingBefore(10000);

						synchronized (linkPage) {
							linkPage.wait(500);
						}

						/*
						 * se recuperan los links de cada uno de los primeros
						 * ocho links
						 */
						List<HtmlAnchor> anchorList2 = linkPage.getAnchors();

						/*
						 * se generan los archivos para las ligas contenidas
						 * dentro de los primeros ocho links
						 */
						for (Iterator iter2 = anchorList2.iterator(); iter2
								.hasNext();) {

							HtmlAnchor anc2 = (HtmlAnchor) iter2.next();

							if (anc2.getAttribute("class").compareTo("liga") == 0) {

								HtmlPage linkPage2 = (HtmlPage) anc2.click();
								wc.waitForBackgroundJavaScriptStartingBefore(5000);

								synchronized (linkPage2) {
									linkPage2.wait(500);
								}

								generaArchivoComerMex(k, linkPage2.asText());
								k++;
							}
						}
					}
				}
				// this.jtextArea.append("\nfin de recuperacion de informacion");
				// log.info("[-]fin descarga de informacion portal comercial mexicana");
				System.out
						.println("[-]fin descarga de informacion portal comercial mexicana");

				wc.closeAllWindows();
			} else if (indPortalEjec == 0) {
				// this.jtextArea.append("[-]Portal Comercial Mexicana Desactivado");
				// log.info("[-]Portal Comercial Mexicana Desactivado");
				System.out.println("[-]Portal Comercial Mexicana Desactivado");
			}

		} catch (Exception e) {
			// log.error("[-]error al navegar en portal comercial mexicana ",e);
			System.out
					.println("[-]error al navegar en portal comercial mexicana ");
			cef.writeCommonWebTxtFile(errorFilePath,
					"error al ingresar a portal de comercial mexicana");
		}

	}

	public void setUser(String user) {
		this.user = user;
	}

	public void setPasswd(String passwd) {
		this.passwd = passwd;
	}

	public String getUser() {
		return this.user;
	}

	public String getPasswd() {
		return this.passwd;
	}

	public String generaArchivoComerMex(int idxArchivo, String contenido) {
		ArrayList<Comer> comerMexRecordList = new ArrayList<Comer>();
		String strIdx = String.valueOf(idxArchivo);
		String comerMexFilePath = null;

		strIdx = strIdx.length() == 1 ? "0" + strIdx : strIdx;

		try {
			Date fileDate = new Date();

			SimpleDateFormat dateFotmat = new SimpleDateFormat("yyyyMMdd");
			SimpleDateFormat timeFotmat = new SimpleDateFormat("HH-mm-ss");

			comerMexFilePath = this.path + File.separator + WB_MAIN_DIR
					+ File.separator + COMERMEX_MAIN_DIR + File.separator
					+ COMERMEX_FILE_DIR + File.separator + "comermex-vyc-"
					+ dateFotmat.format(fileDate) + "-"
					+ timeFotmat.format(fileDate) + "-" + strIdx + ".txt";

			System.out.println(comerMexFilePath);
			BufferedWriter ou = new BufferedWriter(new FileWriter(
					comerMexFilePath));

			ou.write(contenido);

			ou.flush();
			ou.close();

			// this.jtextArea.append("\narchivo creado "+strIdx+" creado");
			// this.jtextArea.append("\ngeneracion de archivo de datos para reporte");

			// TxtComerMex txtComerMex = new TxtComerMex(comerMexFilePath);
			// comerMexRecordList = txtComerMex.readComerMexTxtFile();
			// txtComerMex.writeComerMexDataFile(comerMexRecordList,idxArchivo);
			ComerMexDataFile comerMexDataFile = new ComerMexDataFile(
					comerMexFilePath);
			comerMexDataFile.createComerMexDataFile(idxArchivo);
			// this.jtextArea.append("\narchivo de datos generado");

		} catch (IOException ioex) {
			// log.error("[-]error al generar archivo de datos portalcomercial mexicana ",ioex);
			System.out
					.println("[-]error al generar archivo de datos portalcomercial mexicana ");
		}

		return comerMexFilePath;
	}
}
